package test

import org.apache.spark.{SparkConf, SparkContext}

object demo5 {
  def main(args: Array[String]): Unit = {

    // 转化因子
    //(1)map()
    var conf = new SparkConf().setAppName("myapp").setMaster("local")
    var sc = new SparkContext(conf)
//    var rdd1 = sc.parallelize(List(3,4,5,6,7))
//    //计算数据的平方
//    // map(x=>) x为函数参的名称
////    var rdd2 = rdd1.map(x=>x*x)
////    var rdd2 = rdd1.map(x=>x+1)
//    // 简写
//    var rdd2 = rdd1.map(_+1)
//    // 输出
//    rdd2.collect().foreach(println)

//    //(2)filter() 对RDD中每个元素进行过滤，逐个过滤
//    var rdd1 = sc.parallelize(List(3,4,5,6,7,8))
//    rdd1.filter(x=>x>5)
//    var rdd2 = rdd1.filter(_>5)
//    rdd2.collect().foreach(println)

//    //(3)flatMap()
//    var rdd1 = sc.parallelize(List("hello word welcome", "hello stu"))
//    var rdd2 = rdd1.flatMap(x=>x.split(" "))
//    rdd2.collect().foreach(println)

    //(4) map 与 flatmap 区别 ---- 自己总结
    //当输出元素是一个列表时，flatMap会将列表展平，可以说flatmap可以做map可以做的一切；而当输入的是单个元素的时候，还是用Map，这样会更加明确代码意图


//    //(5) reduceByKey() (key, value)格式将相同的key的元素合并成一个元素 key不变，value可以进行聚合操作
//    var arr1 = List(("zs", 23),("ls", 34),("zs", 45),("ls", 55))
//    var rdd1 = sc.parallelize(arr1)
//    var rdd2 = rdd1.reduceByKey((x,y)=>x+y)
//    // 简化
//    //var rdd2 = rdd1.reduceByKey(_+_)
//    rdd2.collect().foreach(println)



  }

}
